package cn.lumora.core.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Jedis配置类，用于创建和配置Jedis连接池
 */
@Configuration
public class JedisConfig {

    /**
     * 创建并配置Jedis连接池实例
     * 
     * @return 配置好的JedisPool实例
     */
    @Bean
    public JedisPool jedisPool() {
        // 创建连接池配置
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        
        // 设置最大连接数：控制资源使用
        poolConfig.setMaxTotal(128);

        // 禁用JMX管理：禁用JMX管理，避免重复注册MBean
        poolConfig.setJmxEnabled(false);

        // 设置最大空闲连接数：保持合理数量的空闲连接以应对突发请求
        poolConfig.setMaxIdle(100);
        
        // 设置最小空闲连接数：保证一定量的常驻连接提高性能
        poolConfig.setMinIdle(16);
        
        // 在获取连接时测试连接有效性：确保返回给客户端的连接是可用的
        poolConfig.setTestOnBorrow(true);
        
        // 在归还连接时测试连接有效性：确保池中的连接始终可用
        poolConfig.setTestOnReturn(true);
        
        // 在空闲时测试连接有效性：定期清理无效连接
        poolConfig.setTestWhileIdle(true);
        
        // 创建Jedis连接池实例
        // 参数说明：
        // - poolConfig: 连接池配置
        // - "localhost": Redis服务器地址
        // - 6379: Redis默认端口
        // - 2000: 连接超时时间（毫秒）
        // - null: 认证密码（如无认证可为null）
        return new JedisPool(poolConfig, "localhost", 6379, 2000, null);
    }
}
